#!/bin/bash
if [ $# != 4 ]
then
    echo "Ne me lancer pas ;-)"
    echo "Mon maitre est fricorder ..."
    exit
fi
STREAM=$1
LENGTH=$2
MODE=$3
OUTFILE=$4

if [ -n "$XDG_CACHE_HOME" ]; then
    tmpdir=$XDG_CACHE_HOME/fricorder
else
    tmpdir=$HOME/.cache/fricorder
fi
[ -d "$tmpdir" ] || mkdir -p $tmpdir
pidfile=$tmpdir/`basename $OUTFILE`.pid
haltfile=$tmpdir/`basename $OUTFILE`.halt

#--------------------------------------
function Exit() {
#--------------------------------------
 if [ -f $pidfile ]
 then
         for i in `cat $pidfile`
         do
               kill -9 $i > /dev/null 2>&1
         done
         rm -rf $pidfile
 fi

 if [ -f $haltfile ]
 then
    rm -rf $haltfile
 fi
 sync
 exit 0
}

#--------------------------------------
function savePid() {
#--------------------------------------
 echo $1>>$pidfile
}


# trap le sigexit
trap Exit 0

# lance le process principale
case $MODE in
  ogm)
    #vlc $STREAM --vout-filter deinterlace:bob --sout "#transcode{vcodec=mp1v,vb=512,scale=0.75,acodec=mpga,ab=96,channels=2}:std{access=file,mux=ps,url=$OUTFILE}" -I dummy &
    vlc $STREAM --vout-filter deinterlace:bob --sout "#transcode{vcodec=mp4v,vb=512,scale=0.75,acodec=vorb,ab=64,channels=2}:std{access=file,mux=ogg,dst=$OUTFILE.ogm}" -I dummy &

    pid_main=$!
    ;;
  *)
    vlc $STREAM --vout-filter deinterlace:bob --sout "#std{access=file,mux=ts,dst=$OUTFILE.mpg}" -I dummy &
    pid_main=$!
esac
savePid $pid_main


(
 # lance le process de timing d'enregistrement
 echo "0"
 sleep $LENGTH &
 pid_sleep=$!
 savePid $pid_sleep
 wait $pid_sleep
 # si on arrive ici, tout s'est termine dans les regles

 if [ -f $haltfile ]
 then
    # si ce fichier est present, c qu'il doit y avoir un shutdown
    # apres la fin de l'enregistrement
    rm -rf $haltfile
    sudo halt
 fi
 Exit
) | zenity --display=:0.0 --progress --pulsate --title "FriCorder: Enregistrement de" --text `basename $OUTFILE` --auto-close &

# attends la fin de l'enregistrement
wait $pid_main > /dev/null 2>&1
Exit
